package com.dailyblue.java.io;

import java.io.File;
import java.io.IOException;

// 描述文件类
public class DemoA {

    // 如何创建File类的对象---构造器
    private static void a() {
        // 代表的是一个文件
        File file1 = new File("D://a//a//a.txt");
        File file2 = new File("D://a//a", "a.txt");
        File file3 = new File("D://a//a", "b.txt");
        // 代表的是一个文件夹（目录）
        File file4 = new File("D://a//b");
        File file5 = new File("D://a", "b");
    }

    // File 类的常见方法(文件的创建和删除)
    private static void b() throws IOException {
        File file1 = new File("D://a//a//b.txt");
        // 判断目录或者文件是否存在
        boolean exists = file1.exists();
        if (!exists) {
            // 创建文件
            file1.createNewFile();
        } else {
            // 删除这个文件
            file1.delete();
        }
    }

    // File 类的常见方法(文件夹的创建和删除)
    private static void c() throws IOException {
        File file = new File("D://a//b//c");
        boolean exists = file.exists();
        System.out.println("文件是否存在：" + exists);
        // 是否是目录
        boolean isDirectory = file.isDirectory();
        // 是否是文件
        boolean isFile = file.isFile();
        System.out.println("是否是目录：" + isDirectory);
        System.out.println("是否是文件：" + isFile);
        if (!exists) {
            // 创建文件夹 要求父目录存在
            // boolean flag = file.mkdir();
            // 创建文件夹 父目录不存在 创建父目录
            boolean flag = file.mkdirs();
            System.out.println("是否创建成功：" + flag);
        } else {
            file.deleteOnExit();
        }
    }

    // File 类的常见方法(获取当前信息，父目录)
    private static void d() {
        File file = new File("D://a//a//a.txt");
        // 获取文件或者目录名称
        String name = file.getName();
        // 获取父目录的完整名称
        String parentName = file.getParent();
        // 获取父目录
        File parent = file.getParentFile();
        // 获取到文件的绝对路径
        String absolutePath = file.getAbsolutePath();
        System.out.println("文件名：" + name);
        System.out.println("父目录：" + parentName);
        System.out.println("父目录：" + parent);
        System.out.println("绝对路径：" + absolutePath);
    }

    // File 类的常见方法(获取子目录相关)
    private static void e() {
        // 注意：只有目录才有子内容
        File file = new File("D://a");
        String[] childrenPath = file.list();
        File[] children = file.listFiles();
        for (String s : childrenPath) {
            System.out.println(s);
        }
        System.out.println("-------------");
        for (File f : children) {
            System.out.println(f.getAbsolutePath());
        }
    }

    // 将D盘的根内容遍历出来
    private static void work1() {
        File file = new File("D://");
        boolean isDirectory = file.isDirectory();
        if (isDirectory) {
            File[] children = file.listFiles();
            for (File child : children) {
                boolean is = child.isDirectory();
                System.out.print(is ? "目录:" : "文件:");
                System.out.println(child.getName());
            }
        }
    }

    // 练习：遍历指定目录
    private static void work2(File file, int index) {
        File[] children = file.listFiles();
        for (File f : children) {
            for (int i = 0; i < index; i++) {
                System.out.print("\t");
            }
            System.out.println(f.getName());
            if (f.isDirectory()) {
                int j = index + 1;
                work2(f, j);
            }
        }
    }

    public static void main(String[] args) throws IOException {
        File file = new File("D:\\workspace\\Html");
        work2(file, 0);
    }
}
